﻿%%

Name as Identifier:
    Identifier => $1

PartialParameter as Parameter:
    Name => Parameter.New($1, None, None, @1)

FullParameter as Parameter:
    Name => Parameter.New($1, None, None, @@)
    Name ':' TypeExpression => Parameter.New($1, $3, None, @@)
    Name '=' BitwiseXorExpression => Parameter.New($1, None, $3, @@)
    Name ':' TypeExpression '=' BitwiseXorExpression => Parameter.New($1, $3, $5, @@)

PartialParameters as ParameterList:
    => ParameterList.New(default([Parameter]), default([Parameter]), None, default([Parameter]), None, @@)
    PartialParameter %+ ',' ',' '/' => ParameterList.New($1, default([Parameter]), None, default([Parameter]), None, @@)
    PartialParameter %+ ',' => ParameterList.New(default([Parameter]), $1, None, default([Parameter]), None, @@)
    '*' ',' PartialParameter %+ ',' => ParameterList.New(default([Parameter]), default([Parameter]), None, $3, None, @@)
    PartialParameter %+ ',' ',' '/' ',' PartialParameter %+ ',' => ParameterList.New($1, $5, None, default([Parameter]), None, @@)
    PartialParameter %+ ',' ',' '/' ',' '*' ',' PartialParameter %+ ',' => ParameterList.New($1, default([Parameter]), None, $7, None, @@)
    PartialParameter %+ ',' ',' '*' ',' PartialParameter %+ ',' => ParameterList.New(default([Parameter]), $1, None, $5, None, @@)
    PartialParameter %+ ',' ',' '/' ',' PartialParameter %+ ',' ',' '*' ',' PartialParameter %+ ',' => ParameterList.New($1, $5, None, $9, None, @@)

    '*' PartialParameter => ParameterList.New(default([Parameter]), default([Parameter]), $2, default([Parameter]), None, @@)
    PartialParameter %+ ',' ',' '/' ',' '*' PartialParameter => ParameterList.New($1, default([Parameter]), $6, default([Parameter]), None, @@)
    PartialParameter %+ ',' ',' '*' PartialParameter => ParameterList.New(default([Parameter]), $1, $4, default([Parameter]), None, @@)
    '*' PartialParameter ',' PartialParameter %+ ',' => ParameterList.New(default([Parameter]), default([Parameter]), $2, $4, None, @@)
    PartialParameter %+ ',' ',' '/' ',' PartialParameter %+ ',' ',' '*' PartialParameter => ParameterList.New($1, $5, $8, default([Parameter]), None, @@)
    PartialParameter %+ ',' ',' '/' ',' '*' PartialParameter ',' PartialParameter %+ ',' => ParameterList.New($1, default([Parameter]), $6, $8, None, @@)
    PartialParameter %+ ',' ',' '*' PartialParameter ',' PartialParameter %+ ',' => ParameterList.New(default([Parameter]), $1, $4, $6, None, @@)
    PartialParameter %+ ',' ',' '/' ',' PartialParameter %+ ',' ',' '*' PartialParameter ',' PartialParameter %+ ',' => ParameterList.New($1, $5, $8, $10, None, @@)

    '**' PartialParameter => ParameterList.New(default([Parameter]), default([Parameter]), None, default([Parameter]), $2, @@)
    PartialParameter %+ ',' ',' '/' ',' '**' PartialParameter => ParameterList.New($1, default([Parameter]), None, default([Parameter]), $6, @@)
    PartialParameter %+ ',' ',' '**' PartialParameter => ParameterList.New(default([Parameter]), $1, None, default([Parameter]), $4, @@)
    '*' ',' PartialParameter %+ ',' ',' '**' PartialParameter => ParameterList.New(default([Parameter]), default([Parameter]), None, $3, $6, @@)
    PartialParameter %+ ',' ',' '/' ',' PartialParameter %+ ',' ',' '**' PartialParameter => ParameterList.New($1, $5, None, default([Parameter]), $8, @@)
    PartialParameter %+ ',' ',' '/' ',' '*' ',' PartialParameter %+ ',' ',' '**' PartialParameter => ParameterList.New($1, default([Parameter]), None, $7, $10, @@)
    PartialParameter %+ ',' ',' '*' ',' PartialParameter %+ ',' ',' '**' PartialParameter => ParameterList.New(default([Parameter]), $1, None, $5, $8, @@)
    PartialParameter %+ ',' ',' '/' ',' PartialParameter %+ ',' ',' '*' ',' PartialParameter %+ ',' ',' '**' PartialParameter => ParameterList.New($1, $5, None, $9, $12, @@)

    '*' PartialParameter ',' '**' PartialParameter => ParameterList.New(default([Parameter]), default([Parameter]), $2, default([Parameter]), $5, @@)
    PartialParameter %+ ',' ',' '/' ',' '*' PartialParameter ',' '**' PartialParameter => ParameterList.New($1, default([Parameter]), $6, default([Parameter]), $9, @@)
    PartialParameter %+ ',' ',' '*' PartialParameter ',' '**' PartialParameter => ParameterList.New(default([Parameter]), $1, $4, default([Parameter]), $7, @@)
    '*' PartialParameter ',' PartialParameter %+ ',' ',' '**' PartialParameter => ParameterList.New(default([Parameter]), default([Parameter]), $2, $4, $7, @@)
    PartialParameter %+ ',' ',' '/' ',' PartialParameter %+ ',' ',' '*' PartialParameter ',' '**' PartialParameter => ParameterList.New($1, $5, $8, default([Parameter]), $11, @@)
    PartialParameter %+ ',' ',' '/' ',' '*' PartialParameter ',' PartialParameter %+ ',' ',' '**' PartialParameter => ParameterList.New($1, default([Parameter]), $6, $8, $11, @@)
    PartialParameter %+ ',' ',' '*' PartialParameter ',' PartialParameter %+ ',' ',' '**' PartialParameter => ParameterList.New(default([Parameter]), $1, $4, $6, $9, @@)
    PartialParameter %+ ',' ',' '/' ',' PartialParameter %+ ',' ',' '*' PartialParameter ',' PartialParameter %+ ',' ',' '**' PartialParameter => ParameterList.New($1, $5, $8, $10, $13, @@)

FullParameters as ParameterList:
    => ParameterList.New(default([Parameter]), default([Parameter]), None, default([Parameter]), None, @@)
    FullParameter %+ ',' ',' '/' => ParameterList.New($1, default([Parameter]), None, default([Parameter]), None, @@)
    FullParameter %+ ',' => ParameterList.New(default([Parameter]), $1, None, default([Parameter]), None, @@)
    '*' ',' FullParameter %+ ',' => ParameterList.New(default([Parameter]), default([Parameter]), None, $3, None, @@)
    FullParameter %+ ',' ',' '/' ',' FullParameter %+ ',' => ParameterList.New($1, $5, None, default([Parameter]), None, @@)
    FullParameter %+ ',' ',' '/' ',' '*' ',' FullParameter %+ ',' => ParameterList.New($1, default([Parameter]), None, $7, None, @@)
    FullParameter %+ ',' ',' '*' ',' FullParameter %+ ',' => ParameterList.New(default([Parameter]), $1, None, $5, None, @@)
    FullParameter %+ ',' ',' '/' ',' FullParameter %+ ',' ',' '*' ',' FullParameter %+ ',' => ParameterList.New($1, $5, None, $9, None, @@)

    '*' FullParameter => ParameterList.New(default([Parameter]), default([Parameter]), $2, default([Parameter]), None, @@)
    FullParameter %+ ',' ',' '/' ',' '*' FullParameter => ParameterList.New($1, default([Parameter]), $6, default([Parameter]), None, @@)
    FullParameter %+ ',' ',' '*' FullParameter => ParameterList.New(default([Parameter]), $1, $4, default([Parameter]), None, @@)
    '*' FullParameter ',' FullParameter %+ ',' => ParameterList.New(default([Parameter]), default([Parameter]), $2, $4, None, @@)
    FullParameter %+ ',' ',' '/' ',' FullParameter %+ ',' ',' '*' FullParameter => ParameterList.New($1, $5, $8, default([Parameter]), None, @@)
    FullParameter %+ ',' ',' '/' ',' '*' FullParameter ',' FullParameter %+ ',' => ParameterList.New($1, default([Parameter]), $6, $8, None, @@)
    FullParameter %+ ',' ',' '*' FullParameter ',' FullParameter %+ ',' => ParameterList.New(default([Parameter]), $1, $4, $6, None, @@)
    FullParameter %+ ',' ',' '/' ',' FullParameter %+ ',' ',' '*' FullParameter ',' FullParameter %+ ',' => ParameterList.New($1, $5, $8, $10, None, @@)

    '**' FullParameter => ParameterList.New(default([Parameter]), default([Parameter]), None, default([Parameter]), $2, @@)
    FullParameter %+ ',' ',' '/' ',' '**' FullParameter => ParameterList.New($1, default([Parameter]), None, default([Parameter]), $6, @@)
    FullParameter %+ ',' ',' '**' FullParameter => ParameterList.New(default([Parameter]), $1, None, default([Parameter]), $4, @@)
    '*' ',' FullParameter %+ ',' ',' '**' FullParameter => ParameterList.New(default([Parameter]), default([Parameter]), None, $3, $6, @@)
    FullParameter %+ ',' ',' '/' ',' FullParameter %+ ',' ',' '**' FullParameter => ParameterList.New($1, $5, None, default([Parameter]), $8, @@)
    FullParameter %+ ',' ',' '/' ',' '*' ',' FullParameter %+ ',' ',' '**' FullParameter => ParameterList.New($1, default([Parameter]), None, $7, $10, @@)
    FullParameter %+ ',' ',' '*' ',' FullParameter %+ ',' ',' '**' FullParameter => ParameterList.New(default([Parameter]), $1, None, $5, $8, @@)
    FullParameter %+ ',' ',' '/' ',' FullParameter %+ ',' ',' '*' ',' FullParameter %+ ',' ',' '**' FullParameter => ParameterList.New($1, $5, None, $9, $12, @@)

    '*' FullParameter ',' '**' FullParameter => ParameterList.New(default([Parameter]), default([Parameter]), $2, default([Parameter]), $5, @@)
    FullParameter %+ ',' ',' '/' ',' '*' FullParameter ',' '**' FullParameter => ParameterList.New($1, default([Parameter]), $6, default([Parameter]), $9, @@)
    FullParameter %+ ',' ',' '*' FullParameter ',' '**' FullParameter => ParameterList.New(default([Parameter]), $1, $4, default([Parameter]), $7, @@)
    '*' FullParameter ',' FullParameter %+ ',' ',' '**' FullParameter => ParameterList.New(default([Parameter]), default([Parameter]), $2, $4, $7, @@)
    FullParameter %+ ',' ',' '/' ',' FullParameter %+ ',' ',' '*' FullParameter ',' '**' FullParameter => ParameterList.New($1, $5, $8, default([Parameter]), $11, @@)
    FullParameter %+ ',' ',' '/' ',' '*' FullParameter ',' FullParameter %+ ',' ',' '**' FullParameter => ParameterList.New($1, default([Parameter]), $6, $8, $11, @@)
    FullParameter %+ ',' ',' '*' FullParameter ',' FullParameter %+ ',' ',' '**' FullParameter => ParameterList.New(default([Parameter]), $1, $4, $6, $9, @@)
    FullParameter %+ ',' ',' '/' ',' FullParameter %+ ',' ',' '*' FullParameter ',' FullParameter %+ ',' ',' '**' FullParameter => ParameterList.New($1, $5, $8, $10, $13, @@)

LambdaParameterList as ParameterList:
    PartialParameters => $1
    '(' FullParameters ')' => $2

ParameterList as ParameterList:
    FullParameters => $1
